Saltar a contenido

📘 Clase 01: Arquitectura de Software y Planificación del Proyecto

Open In Colab Abrir en Studio Local Ver en GitHub


1. 💡 Fundamentación Teórica y Modelo Mental

Diseño modular y desacoplado para aplicaciones de producción: 1. Separación de Responsabilidades: api (controladores), core (configuración), models (entidades), services (lógica de negocio). 2. Inversión de Dependencias: Los módulos de alto nivel no dependen de los de bajo nivel; ambos dependen de abstracciones. 3. Verificación de Estructura: Validar que el proyecto posea todas las capas obligatorias.

🌟 Modelo Mental de la Sesión: «El Plano del Rascacielos Modular (Clean Architecture)»

En esta sesión anclamos el aprendizaje en la metáfora del mundo real para visualizar cómo fluyen las estructuras de datos y el flujo de ejecución en la memoria.


2. 🗺️ Arquitectura de Ejecución y Diagrama de Flujo

flowchart TD
    A["🌐 Capa API (Endpoints REST)"] --> B["⚙️ Capa Services (Lógica Negocio)"]
    B --> C["💾 Capa Repositories (Persistencia DB)"]
    B --> D["🤖 Capa Agents (Motor de IA)"]
    style A fill:#1e293b,color:#ffffff,stroke:#3b82f6,stroke-width:2px
    style B fill:#0f766e,color:#ffffff,stroke:#2dd4bf,stroke-width:2px
    style C fill:#d97706,color:#ffffff,stroke:#fbbf24,stroke-width:2px
    style D fill:#581c87,color:#ffffff,stroke:#c084fc,stroke-width:2px

3. 💻 Código de Implementación Práctica

```python MODULOS_OBLIGATORIOS = {"api", "core", "models", "services", "tests"}

def validar_modulos(modulos_presentes: list[str]) -> bool: return MODULOS_OBLIGATORIOS.issubset(set(modulos_presentes))

print("¿Arquitectura válida?:", validar_modulos(["api", "core", "models", "services", "tests", "ui"])) ```

```python carpetas = ["src/api", "src/services", "src/models", "tests"]

print("Estructura definida:", carpetas) ```


4. 🛡️ Buenas Prácticas PEP 8: Antipatrones vs Código Pythonic

⚠️ Cuidado con los Antipatrones

```python

En archivo del frontend:

cursor.execute('INSERT INTO...') ❌ Acoplamiento peligroso

```
# Frontend -> Llama a API REST -> API invoca Repositorio -> BD ✅

5. 🏋️ Desafío Práctico de la Clase

🎯 Enunciado del Reto

Crea una función validar_estructura_proyecto(modulos: list[str]) -> bool que retorne True si la lista contiene al menos los 5 módulos base: 'api', 'core', 'models', 'services', 'tests'.

⚡ Resolución Híbrida en 1 Clic (Local + Web)

Si tienes ejecutando wisrovi ui en tu terminal local, puedes 🚀 Abrir este Reto directamente en tu Studio Local (127.0.0.1:8501) para escribir tu código con auto-formateo AST, inspeccionar variables en el Heap/Stack y evaluarlo con pruebas en tiempo real.

def validar_estructura_proyecto(modulos: list[str]) -> bool:
# ✍️ Verifica que contenga api, core, models, services, tests
requeridos = {"api", "core", "models", "services", "tests"}
return requeridos.issubset(set(modulos))
💡 Pista Socrática 1

💡 Pista 1: Define el conjunto requerido: {'api', 'core', 'models', 'services', 'tests'}.

💡 Pista Socrática 2

💡 Pista 2: Usa .issubset(set(modulos)) para verificar la inclusión.

💡 Pista Socrática 3

💡 Pista 3: Retorna el resultado booleano.

Para resolver este ejercicio en tu entorno: 1. Abre el archivo ejercicios/reto.py de esta clase en Visual Studio Code o utiliza wisrovi ui / wisrovi tutor. 2. Implementa tu solución cumpliendo los requisitos y contratos de tipado. 3. Valida tus resultados ejecutando las pruebas unitarias:

pytest tests/curso_04/test_clase_01_arquitectura_y_planificacion.py


6. 📚 Fuentes y Bibliografía Recomendada